#ifndef MENU_H
#define MENU_H
#ifdef __cplusplus 
extern "C" {
#endif  //__cplusplus
#include <stdlib.h>
#include <stdbool.h>
#include <stdio.h>
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
#include <SDL.h>
#include <SDL_ttf.h>
#include <SDL_keycode.h>
#else
#include "GUI.h"
#endif
#define DEBUG_LOG(fmt, ...) printf(fmt, ##__VA_ARGS__)


#define MENU_TYPE_ROOT 0
#define MENU_TYPE_CHILD 1

#define MENU_WIDTH  320
#define MENU_HEIGHT 240
#define MENU_TEXT_SIZE 24




#define GUI_DRAW_TEXT(x, y, color, text)  render_text(text,x,y,color)// GUI 绘制文本函数占位符
#define GUI_DRAW_RECT(x, y, w, h, color)  // GUI 绘制矩形函数占位符
#define GUI_CLEAR_SCREEN()  SDL_SetRenderDrawColor(ren, 0, 0, 0, 255); SDL_RenderClear(ren); // GUI 清屏函数占位符
#define GUI_UPDATE()  SDL_RenderPresent(ren);// GUI 更新显示函数占位符

enum {
    MENU_IS_CHOSEN = 0, // 菜单已选择
    MENU_IS_UNCHOSEN = -1, // 菜单未选择
    MENU_IS_PRESSED = 1, // 菜单已按下
    MENU_IS_OPENED = 2, // 菜单已打开
};

typedef struct SHOUW_NUM{
    int ints;  // 整数部分
    int decimals;  // 小数部分
    int min;
    int max;
}Number;
typedef struct MENU_INFO
{
    char *label;  // 菜单项标签
    int status;  // 菜单项状态
    int text_size;  // 菜单项文本大小
    bool is_value;  // 菜单项值是否有效
    Number value;  // 菜单项值
    void (*action)(void);  // 菜单项操作函数指针
}MenuInfo;



typedef struct MENU {
    MenuInfo *info;  // 菜单项信息
    void (*action)(void);  // 菜单项操作函数指针
    struct MENU *up;
    struct MENU *down;
    struct MENU *enter;
    struct MENU *back;
} Menu;

extern Menu *menus[];  // 菜单指针数组，指向当前菜单项
void menu_src_init(void (*w));

Menu *menu_create(Menu *dad,Menu *son,
    char *label, int type,void (*action)(void), Number value);
void menu_event(void);

void menu_gui_event(void);
void menu_key_event(SDL_Keycode key);
#ifdef __cplusplus
}
#endif  //__cplusplus
#endif // MENU_H